<?php

namespace app\admin\controller;

use think\Controller;
use think\Request;

use app\admin\model\Banners as BannersModel;
use app\admin\model\BannerItems as BannerItemsModel;
use think\Validate;

class Banners extends Base
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
       $keyword = input('keyword');

        $where = [];

        if(!empty($keyword)) {
            $where['name'] =['like' , "%$keyword%" ];
        }

        //查询多条
       //$list = \app\admin\model\Banners::select();
       $list = \app\admin\model\Banners::where($where)->order('id desc')->paginate(10 , false,[
            'query' => ['keyword' => $keyword]
       ]);
       $count = \app\admin\model\Banners::count();
       
       return view('index' , ['list' => $list]);


       //$banners =  new \app\admin\model\Banners();

    //    $banners->field('id' , 'name')->select();  //指定要查询的字段
    //    $banners->order('id desc , time asd')->select();  //order by
    //    $banners->limit(0,3)->select();
    //    $banners->group('cate_id')->select();
    //    $banners->having('id>3')->select();
    

         //alias方法设置别名   链接查询
        // $banners =   BannersModel::alias('b1')
        //     ->join('banner_items b2' , 'b1.id = b2.banner_id' , 'left' )
        //     ->where('b1.id','<' , 20)
        //     ->field('b1.* , b2.name')
        //     ->select();
        //dump($data);


        //统计查询
        //count()  max() min() avg() sum()

        //查询一条记录的一个字段值
        //\app\admin\model\Banners::where('id',2)->value('name');
        //查询一列字段值 返回id下标的数组
        //\app\admin\model\Banners::where('id','>',2)->column('name' , 'id');

        // $banners =   BannersModel::where('status',1)
        //     ->where('id','>' , 2)
        //     ->where('slug' , 'like' , '%user%')
        //     ->field('id , name ,status')
        //     ->order('id desc')
        //     ->select();

        //页面跳转和重定向
        //$this->success('新增成功', 'User/list');
        //$this->error('新增失败');
        //重定向到News模块的Category操作
        //$this->redirect('News/category', ['cate_id' => 2]);



    }

    /**
     * 显示创建资源表单页.
     *
     * @return \think\Response
     */
    public function create()
    {
        //
        return view('create');
    }

    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        $param = input();

        //1定义验证规则
        // $rule = [
        //     'name|名称' => 'require',
        //     'price|价格' => 'require|float|egt:0',
        //     'status|状态' => 'require|integer|egt:1',
        // ];
        // //定义错误提示信息（可选）
        // $msg = [
        //     'price.float' => '价格必须是整数或者小数',
        // ];
        // //实例化验证类Validate
        // $validate = new \think\Validate($rule , $msg);
        // //执行验证
        // if(!$validate->check($param)) {
        //     //验证失败
        //     $error_msg = $validate->getError();
        //     $this->error($error_msg);
        // }

         //2控制器验证
          $rule = [
            'name|名称' => 'require|token',
           // 'price|价格' => 'require|float|egt:0',
            'status|状态' => 'require|integer|egt:1',
        ];
        //定义错误提示信息（可选）
        $msg = [
           // 'price.float' => '价格必须是整数或者小数',
        ];
        //调用控制器的validate方法
        $validate = $this->validate($param ,$rule ,$msg);
        if($validate !== true) {
            $this->error($validate);
        }

        $param['image'] = $this->uploadFile();


        //添加数据，第二个参数true表示过滤非数据表字段
        \app\admin\model\Banners::create($param , true);
        $this->success('操作成功' , 'admin/index/index');
    

        //添加数据
        //   $banners =  new \app\admin\model\Banners();
        //   $banners->name        = '测试';
        //   $banners->slug        = 'uers';
        //   $banners->image       = 'url';
        //   $banners->order       = 0;
        //   $banners->status      =  1;
        //   $banners->created_at  = date('Y-m-d H:i:s' , time());
        //   $banners-> = 1;
        //   $banners->save();

        //   dump($banners->id);

        //静态方法添加
        // $data = [
        //     'name' => '测试2' , 'slug' => 'uers2' , 'image' => 'url' , 
        //     'order'  => 0 , 'status' => 1,
        //     'created_at' => date('Y-m-d H:i:s' , time()),
        //     'created_uid' => 1
        // ];
        // $banners = \app\admin\model\Banners::create($data);
        // dump($banners->id);

        //批量添加
        // $banners =  new \app\admin\model\Banners();

        // $data = [
        //     ['name' => '测试3' , 'slug' => 'uers3' , 'image' => 'url' , 
        //     'order'  => 0 , 'status' => 1,
        //     'created_at' => date('Y-m-d H:i:s' , time()),
        //     'created_uid' => 1],
        //     ['name' => '测试4' , 'slug' => 'uers4' , 'image' => 'url' , 
        //     'order'  => 0 , 'status' => 1,
        //     'created_at' => date('Y-m-d H:i:s' , time()),
        //     'created_uid' => 1],
        // ];
        // $res = $banners->saveAll($data);
        // dump($res);



    }

    private function uploadFile() {

        $file = request()->file('image');

        if(empty($file)) {
            $this->error('没有上传文件');
        }
        // 移动到框架应用根目录/public/uploads/ 目录下
        $info = $file->validate(['size' => 10*1024*1024 , 'ext' => 'jpg,png,gif,jpeg'])
        ->move(ROOT_PATH . 'public' . DS . 'uploads');
        if($info){
            // 成功上传后 获取上传信息
            // 输出 jpg
            // echo $info->getExtension();
            // // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
            // echo $info->getSaveName();
            // // 输出 42a79759f284b767dfcb2a0197904287.jpg
            // echo $info->getFilename(); 
            //uploads/20230429/fdfg.jpg
            $file = DS . 'uploads' . DS . $info->getSaveName();
           
            //生成缩略图  \think\Image类 
            //打开
            $image = \think\Image::open( '.' . $file );
             //生成缩略图  保存
            $image->thumb(400,350)->save('.' . $file);
           
            return $file;
        }else{
            // 上传失败获取错误信息
            $err =  $file->getError();
            return $this->error($err);

        }


    }




    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        //查询一条数据
        $banners = \app\admin\model\Banners::find($id);
        return view('read' , ['banners' => $banners]);
       // $banners =  BannersModel::where('id',10)->value('name');
        //$banners =   BannersModel::where('status',1)->column('name');
        //$banners =   BannersModel::where('status',1)->column('name');
        //$banners =   BannersModel::where('status',1)->column('name','id');
        
    

    }

    /**
     * 显示编辑资源表单页.
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function edit($id)
    {
        //
        $banners = \app\admin\model\Banners::find($id);

        return view('edit',['banners' => $banners]);
    }

    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request , $id)
    {
        $param = input();
        $rule = [
            'name|名称' => 'require',
           // 'price|价格' => 'require|float|egt:0',
            'status|状态' => 'require|integer|egt:1',
        ];
        //定义错误提示信息（可选）
        $msg = [
           // 'price.float' => '价格必须是整数或者小数',
        ];
        //调用控制器的validate方法
        $validate = $this->validate($param ,$rule ,$msg);
        if($validate !== true) {
            $this->error($validate);
        }
        
        //先查询，再修改
        // $banners = \app\admin\model\Banners::get(23);
        // $banners->name    = 'thinkphp';
        // $banners->slug    = 'thinkphp@qq.com';
        // $res = $banners->allowField(true)->save();

        $file = request()->file('image');

        if(empty($file)) {
            unset($param['image']);
        }else{
            //上传图片
            $param['image'] = $this->uploadFile();
            $banner = \app\admin\model\Banners::find($id);
            //删除原图片
            if($banner) {
                @unlink('.' .$banner->image);
            }
        }

        $banners = \app\admin\model\Banners::update($param , ['id' => $id] , true);
        
        
        $this->success('操作成功', 'admin/banners/index');
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        //

        // $res = \app\admin\model\Banners::where('id' , $id)->delete();
        // dump($res);
        $res = \app\admin\model\Banners::destroy($id);   //可传数组[1,2,3]


        $this->success('操作成功', 'admin/banners/index');

    }
}
